koa 安装 cors 后, 启动服务报错
bash
Server is running on http://localhost:13000
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server is running on http://localhost:13000
TypeError: res.setHeader is not a function
at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:153:15)
at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:149:11)
at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:149:11)
at cors (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:171:7)
at D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:224:17
at originCallback (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:214:15)
at D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:219:13
at optionsCallback (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:199:9)
at corsMiddleware (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:204:7)
at dispatch (D:\workspace\www.zichin.com\server\tongji\node_modules\koa\node_modules\koa-compose\index.js:42:32)
解决方案
cors
中间件的版本可能不兼容 Koa,可以使用koa-cors
。
koa-cors
koa-cors
是一个用于 Koa 框架的中间件,用于处理跨域资源共享(CORS)问题。使用 koa-cors
可以方便地为你的 Koa 服务器添加 CORS 支持。以下是如何在 Koa 项目中使用 koa-cors
的步骤:
- 首先,安装
koa-cors
:
bash
npm install koa-cors
- 然后,在你的 Koa 项目中引入并使用
koa-cors
中间件:
javascript
const Koa = require("koa");
const cors = require("koa-cors");
const app = new Koa();
// 使用 koa-cors 中间件
app.use(
cors({
origin: "*", // 允许所有来源访问
methods: ["GET", "POST", "PUT", "DELETE"], // 允许的请求方法
allowedHeaders: ["Content-Type", "Authorization"], // 允许的请求头
credentials: true, // 是否允许发送 Cookie
maxAge: 86400, // 预检请求的有效期
})
);
// 你的其他路由和中间件代码
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
在这个例子中,我们设置了 origin
为 '*'
,这意味着允许所有来源的请求访问。你可以将其更改为特定的域名或域名列表,以限制允许访问的来源。
通过这种方式,你的 Koa 服务器就允许了跨域访问。如果你需要更细粒度的控制,可以查看 koa-cors
的文档,了解更多选项和配置。